/**
 * 把第 i 位置 1：a |= (1 << i)
 * 把第 i 位置 0：a &= ~(1 << i)
 * 把第 i 位取反：a ^= (1 << i)
 * 读取第 i 位的值：(a >> i) & 1
 */

/**
 * (1) a与-a操作可以获得a最低位的1
 *  a = 00110100
 *  ~a = 11001011
 *  -a = 11001100
 *  a & -a = 00000100
 * 
 * 遍历a中所有的1
 *  while a != 0:
 *  	p = a & -a
 *  	a ^= p
 *  	Do something with p
 * 
 */

/**
 * (2)a与a-1可以将a最低位的1置为0
 * a=0011
 * a-1=0010
 * a&a-1=0010
 * 
 * 获得n中1的个数
 *  while (n != 0) {
 *     sum++;
 *     n &= (n - 1);
 *  }
 * 
 * 
 */
/**
 * @author I321035
 *
 */
package a_bit;